package com.lin.zoo.dao;

import com.lin.zoo.dao.Interface.IDIndent;
import com.lin.zoo.util.DataBase;
import com.lin.zoo.po.Messege;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;

public class IndentDao implements IDIndent {
    private Connection con;

    private PreparedStatement state;
    @Override
    public Messege addIndent(){
        try{
            con = DataBase.getCon();
            //获取连接，通过DateBase处理好的通道，连接至mysql数据。
            String sql = "INSERT INTO indent (type,ordertime,endtime,visitorid,status,money) VALUES (?,?,?,?,?,?)";//添加新订单
            state= con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);//执行sql并返回主键
            state.setObject(1,"入园票");//设定订单形式为“入园票”
            state.setObject(2, getStartDate());//输入下单的时间
            state.setObject(3, getEndTime(getDate()));//输入有效限期
            state.setObject(4,UserDao.loginId);//从登录页面获取用户id，并作为下单的用户识别编号
            state.setObject(5,"否");//初始化状态为没退票
            state.setObject(6,30);//入场票为30元
            state.executeUpdate();//完成数据的提交更新
            try (ResultSet rs = state.getGeneratedKeys()) {
                if (rs.next()) {
                    String id = rs.getString(1);
                    return new Messege("购买成功",id);
                }
            }
        }//捕捉异常
        catch(ClassNotFoundException | SQLException e){
            System.out.println("数据库数据调用失败" + this.getClass().getName());
        }finally{
            try{
                DataBase.close(state, con);
            } catch(SQLException e){
                System.out.println("连接关闭失败" + this.getClass().getName());
            }
        }
        return new Messege("购买失败",null);
    }
    @Override
    //申请退订按钮
    public Messege delIndent(Object id){
        try{con = DataBase.getCon();
            //获取连接，通过DateBase处理好的通道，连接至mysql数据。
            String sql = "update indent set status=? WHERE id=?";//更新申请信息，申请退订后信息改为“是”
            state=con.prepareStatement(sql);
            state.setObject(1,"是");
            state.setObject(2,id);
            state.executeUpdate();
            return new Messege("申请成功",id);
        }//捕捉异常
        catch(ClassNotFoundException | SQLException e){
            System.out.println("数据库数据调用失败" + this.getClass().getName());
        }finally{
            try{
                DataBase.close(state, con);
            } catch(SQLException e){
                System.out.println("连接关闭失败" + this.getClass().getName());
            }
        }
        return new Messege("申请失败",null);
    }
    @Override
    //园长确认退订
    public Messege confrim(Object id){
        try{
            con = DataBase.getCon();
            //获取连接，通过DateBase处理好的通道，连接至mysql数据。
            String sql = "DELETE FROM indent WHERE id=?";//删除订单，确认后将订单从数据库中删除
            //设定mysql语句
            state = con.prepareStatement(sql);
            //执行sql语句
            state.setObject(1, id);
            state.executeUpdate();
            return new Messege("订单退订确认成功",id);
        }//捕捉异常
        catch(ClassNotFoundException | SQLException e){
            System.out.println("数据库数据调用失败" + this.getClass().getName());
        }finally{
            try{
                DataBase.close(state, con);
            } catch(SQLException e){
                System.out.println("连接关闭失败" + this.getClass().getName());
            }
        }
        return new Messege("退订确认失败",null);
    }
    @Override
    public String getStartDate(){
        Date starttime=new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return format.format(starttime);
    }
    //获取操作时间
    @Override
    public Date getDate(){
        return new Date();
    }
    //订单为期一个月，由下单时间确定有效限期，本函数用于获取有效限期
    @Override
    public String getEndTime(Date time){
        Date endtime;
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(time);//设置开始日期
        calendar.add(Calendar.MONTH,1);//1个月后的限期
        endtime=calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return format.format(endtime);
    }
}
